package com.prothink.threadadmindemo.controller;

public class XiaoZhiWeiController {
    /**
     * 二分查找算法
     *
     * @param arr 有序数组
     * @param target 要查找的目标值
     * @return 目标值在数组中的索引，如果未找到则返回-1
     */
    public static int binarySearch(int[] arr, int target) {
        int left = 0; // 定义最左边的索引
        int right = arr.length - 1; // 定义最右边的索引

        while (left <= right) {
            int mid = left + (right - left) / 2; // 防止(left + right)直接相加时溢出
            if (arr[mid] == target) {
                // 找到目标值，返回索引
                return mid;
            } else if (arr[mid] < target) {
                // 调整查找范围的左边界
                left = mid + 1;
            } else {
                // 调整查找范围的右边界
                right = mid - 1;
            }
        }
        // 未找到目标值，返回-1
        return -1;
    }

    public static void main(String[] args) {
        int[] arr = {-1, 0, 3, 5, 9, 12};
        int target = 9;
        int result = binarySearch(arr, target);
        if (result != -1) {
            System.out.println("元素在数组中的索引为: " + result);
        } else {
            System.out.println("数组中不存在该元素");
        }
    }
}
